import type {
  EntityApi,
  EntityPage,
  EntityReq,
  EntityModel,
  EntityKey,
  EntityKeyList,
  EntityCreateReq,
  EntityUpdateReq,
} from "jmash-core";

// 接口定义
export interface RoleApi extends EntityApi {}

// 角色管理查询
export interface RoleReq extends EntityReq {
  // 租户
  tenant?: string;
  // 是否包含
  hasRoleType?: boolean;
  // 角色role/职务job
  roleType: string;
  // 编码
  roleCode?: string;
  // 名称
  likeRoleName?: string;
}

// 角色管理分页
export interface RolePage extends EntityPage {
  // 内容
  results: Array<RoleModel>;
}

// 角色管理新增查询
export interface RoleCreateReq extends EntityCreateReq {
  // 租户
  tenant?: string;
  // 用于检测重复请求的唯一字符串ID
  requestId?: string;
  // 角色role/职务job
  roleType?: string;
  // 编码
  roleCode?: string;
  // 名称
  roleName?: string;
  // 上级
  parentId?: string;
  // 描述
  description?: string;
  // 操作权限
  permCodes?: Array<string>;
  // 所属模块
  moduleId?: string;
  // 角色互斥
  roleDuty: RoleDutyItem[];
  // 角色互斥
  roleDutyModel?: RoleDutyItem[];
}

// 角色管理更新查询
export interface RoleUpdateReq extends EntityUpdateReq {
  // 租户
  tenant?: string;
  // 用于检测重复请求的唯一字符串ID
  requestId?: string;
  // 更新字段掩码
  updateMask: string;
  // 角色role/职务job
  roleType?: string;
  // 角色ID
  roleId?: string;
  // 编码
  roleCode?: string;
  // 名称
  roleName?: string;
  // 上级
  parentId?: string;
  // 描述
  description?: string;
  // 操作权限
  permCodes?: Array<string>;
  // 所属模块
  moduleId?: string;
  // 角色互斥
  roleDuty: RoleDutyItem[];
  // 角色互斥
  roleDutyModel?: RoleDutyItem[];
}

export type RoleFormReq = RoleCreateReq | RoleUpdateReq;

export interface RoleMoveKey {
  // 租户
  tenant?: string;
  roleId?: string;
  up?: boolean;
}

// 互斥角色
interface RoleDutyItem {
  roleId: string; // 角色
  dutyType: string; // 类型
}

// 校验角色信息
export interface VerifyRoleReq {
  // 租户.
  tenant?: string;
  // 角色编码
  roleCode?: string;
  // 新增/更新
  addFlag?: boolean;
  // 当前角色id
  roleId?: string;
}

// 角色/职务表主键
export interface RoleKey extends EntityKey {
  // 租户
  tenant?: string;
  // 角色ID/职务ID
  roleId?: string;
}

// 角色/职务表列表 key
export interface RoleKeyList extends EntityKeyList {
  // 租户
  tenant?: string;
  // 角色ID/职务ID
  roleId?: Array<string>;
}

// 角色/职务表实体
export interface RoleModel extends EntityModel {
  // 角色ID/职务ID
  roleId?: string;
  // 角色编码/职务编码
  roleCode?: string;
  // 角色名称/职务名称
  roleName?: string;
  // 角色/职务
  roleType?: string;
  // 父角色
  parentId?: string;
  // 深度
  depth?: number;
  // 排序
  orderBy?: number;
  // 描述
  description?: string;
  // 创建人
  createBy?: string;
  // 创建时间
  createTime?: string;
  // 操作权限
  permCodes?: Array<string>;
}
